Add first steps for gui

This commit is contained in:
SemvdH
2025-11-10 22:27:05 +01:00
parent 1632d02e69
commit db760e5dda
6 changed files with 89 additions and 2 deletions

View File

@@ -60,6 +60,7 @@ public enum DatabaseManager {
public void registerDatabaseInitializeListener(DatabaseInitializeListener listener) {
this.databaseInitializeListeners.add(listener);
this.app.getLogger().log(Level.INFO, "Registered database initialize listener: {0}", listener.getClass().getName());
// immediately initialize if the database is already initialized
if (this.initialized) {

View File

@@ -0,0 +1,14 @@
package nl.interestingcorner.core.gui;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
public class GUI implements InventoryHolder {
@Override
public Inventory getInventory() {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'getInventory'");
}
}

View File

@@ -0,0 +1,42 @@
package nl.interestingcorner.core.gui;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
public class GUIBuilder {
public static final int MAX_INVENTORY_SIZE = 54; // max size of inventory before pages are needed
public static final int MAX_PAGE_INVENTORY_SIZE = 45; // max amount of items on a page
public Inventory buildInventory(List<ItemStack> 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, MAX_INVENTORY_SIZE, "Coordinates Menu");
for (ItemStack item : items) {
gui.addItem(item);
}
return gui;
}
private static int getPagesAmount(int itemsAmount) {
if (itemsAmount > MAX_INVENTORY_SIZE) {
return ((itemsAmount / MAX_PAGE_INVENTORY_SIZE) + 1);
}
return 1;
}
}