Add command to get map to view al coordinates
This commit is contained in:
@@ -4,44 +4,19 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
public class GUI implements InventoryHolder, Listener {
|
||||
public final class GUI implements InventoryHolder, Listener {
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
public static final int PREVIOUS_PAGE_SLOT = 45; // slot for previous page button
|
||||
public static final int NEXT_PAGE_SLOT = 53; // slot for next page button
|
||||
|
||||
/**
|
||||
* Inventory that will be displayed
|
||||
@@ -71,7 +46,7 @@ public void onInventoryClick(InventoryClickEvent event) {
|
||||
/**
|
||||
* Listener for item click events
|
||||
*/
|
||||
private GUIItemClickListener itemClickListener;
|
||||
private final List<GUIItemClickListener> itemClickListeners;
|
||||
|
||||
public GUI(String title, int pageSize) {
|
||||
this.title = title;
|
||||
@@ -79,6 +54,8 @@ public void onInventoryClick(InventoryClickEvent event) {
|
||||
this.items = new ArrayList<>();
|
||||
this.currentPage = 0;
|
||||
this.inventory = null;
|
||||
this.itemClickListeners = new ArrayList<>();
|
||||
addItemClickListener(new NavigationItemClickListener());
|
||||
}
|
||||
|
||||
public void setItems(List<ItemStack> items) {
|
||||
@@ -87,12 +64,12 @@ public void onInventoryClick(InventoryClickEvent event) {
|
||||
updateInventory();
|
||||
}
|
||||
|
||||
public void setItemClickListener(GUIItemClickListener listener) {
|
||||
this.itemClickListener = listener;
|
||||
public void addItemClickListener(GUIItemClickListener listener) {
|
||||
this.itemClickListeners.add(listener);
|
||||
}
|
||||
|
||||
public GUIItemClickListener getItemClickListener() {
|
||||
return this.itemClickListener;
|
||||
public List<GUIItemClickListener> getItemClickListeners() {
|
||||
return this.itemClickListeners;
|
||||
}
|
||||
|
||||
public void addItem(ItemStack item) {
|
||||
@@ -124,16 +101,55 @@ public void onInventoryClick(InventoryClickEvent event) {
|
||||
}
|
||||
|
||||
private void updateInventory() {
|
||||
// Create inventory for the current page
|
||||
int size = Math.min(pageSize, MAX_INVENTORY_SIZE);
|
||||
this.inventory = Bukkit.createInventory(this, size, title);
|
||||
int start = currentPage * pageSize;
|
||||
int end = Math.min(start + pageSize, items.size());
|
||||
boolean needsPagination = items.size() > DEFAULT_PAGE_SIZE;
|
||||
int inventorySize = needsPagination ? MAX_INVENTORY_SIZE : pageSize;
|
||||
this.inventory = Bukkit.createInventory(this, inventorySize, title);
|
||||
|
||||
int itemsPerPage = needsPagination ? DEFAULT_PAGE_SIZE : pageSize;
|
||||
int start = currentPage * itemsPerPage;
|
||||
int end = Math.min(start + itemsPerPage, items.size());
|
||||
List<ItemStack> pageItems = items.subList(start, end);
|
||||
|
||||
for (int i = 0; i < pageItems.size(); i++) {
|
||||
if (needsPagination && i >= DEFAULT_PAGE_SIZE) {
|
||||
// Fill only the top rows (0-44) with items if paginating
|
||||
break;
|
||||
}
|
||||
this.inventory.setItem(i, pageItems.get(i));
|
||||
}
|
||||
// TODO: Add navigation items if needed
|
||||
|
||||
// Add navigation buttons if needed
|
||||
if (needsPagination) {
|
||||
if (currentPage > 0) {
|
||||
// Slot 45: Previous Page
|
||||
// use currentPage to show 1-based page number
|
||||
ItemStack prevButton = createNavigationItem("Previous Page", (currentPage) + " / " + getPagesAmount());
|
||||
this.inventory.setItem(PREVIOUS_PAGE_SLOT, prevButton);
|
||||
}
|
||||
|
||||
if ((currentPage + 1) * pageSize < items.size()) {
|
||||
// Slot 53: Next Page
|
||||
// use currentPage + 2 to show 1-based page number
|
||||
ItemStack nextButton = createNavigationItem("Next Page", (currentPage + 2) + " / " + getPagesAmount());
|
||||
this.inventory.setItem(NEXT_PAGE_SLOT, nextButton);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ItemStack createNavigationItem(String name, String description) {
|
||||
ItemStack compass = new ItemStack(Material.COMPASS);
|
||||
ItemMeta meta = compass.getItemMeta();
|
||||
if (meta == null)
|
||||
{
|
||||
return compass;
|
||||
}
|
||||
|
||||
meta.setDisplayName(name);
|
||||
List<String> lore = new ArrayList<>();
|
||||
lore.add(description);
|
||||
meta.setLore(lore);
|
||||
compass.setItemMeta(meta);
|
||||
return compass;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package nl.interestingcorner.core.gui;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
@@ -16,8 +18,10 @@ public enum GUIInventoryClickListener implements Listener{
|
||||
public void onInventoryClick(InventoryClickEvent event) {
|
||||
if (event.getInventory().getHolder() instanceof GUI gui) {
|
||||
Logger.INSTANCE.info(TAG, "Inventory click event detected");
|
||||
GUIItemClickListener itemClickListener = gui.getItemClickListener();
|
||||
if (itemClickListener!= null) {
|
||||
|
||||
List<GUIItemClickListener> itemClickListeners = gui.getItemClickListeners();
|
||||
for (GUIItemClickListener itemClickListener : itemClickListeners)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
Logger.INSTANCE.info(TAG, "Sending click event to listener");
|
||||
itemClickListener.onItemClick((Player) event.getWhoClicked(), gui, event.getCurrentItem(), event.getSlot());
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package nl.interestingcorner.core.gui;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class NavigationItemClickListener implements GUIItemClickListener {
|
||||
|
||||
@Override
|
||||
public void onItemClick(Player player, GUI gui, ItemStack item, int slot) {
|
||||
if (slot == GUI.PREVIOUS_PAGE_SLOT) {
|
||||
gui.previousPage();
|
||||
player.closeInventory();
|
||||
gui.show(player);
|
||||
} else if (slot == GUI.NEXT_PAGE_SLOT) {
|
||||
gui.nextPage();
|
||||
player.closeInventory();
|
||||
gui.show(player);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user