From db760e5dda46dd68bb6aebc37f2250246000774b Mon Sep 17 00:00:00 2001 From: SemvdH Date: Mon, 10 Nov 2025 22:27:05 +0100 Subject: [PATCH] Add first steps for gui --- .../coordinates/db/Coordinate.java | 26 ++++++++++++ .../db/CoordinatesDatabaseManager.java | 3 ++ .../core/db/DatabaseManager.java | 1 + .../nl/interestingcorner/core/gui/GUI.java | 14 +++++++ .../core/gui/GUIBuilder.java | 42 +++++++++++++++++++ install_and_jar.sh | 5 ++- 6 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/GUI.java create mode 100644 ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/GUIBuilder.java diff --git a/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/db/Coordinate.java b/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/db/Coordinate.java index 78cab5e..31f7b4a 100644 --- a/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/db/Coordinate.java +++ b/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/db/Coordinate.java @@ -1,5 +1,10 @@ package nl.interestingcorner.coordinates.db; +import java.util.List; + +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + import nl.interestingcorner.core.MinecraftColor; /** @@ -110,6 +115,27 @@ public class Coordinate { return sb.toString(); } + public ItemStack toItem() + { + ItemStack itemStack = new ItemStack(this.color.toMaterial()); + ItemMeta meta = itemStack.getItemMeta(); + if (meta == null) { + return itemStack; + } + meta.setDisplayName(this.color.toColorCode() + this.name); + meta.setLore(List.of( + MinecraftColor.WHITE.toColorCode() + this.description, + this.nether ? MinecraftColor.RED.toColorCode() + "Nether Coordinate" : "Overworld Coordinate", + "X: " + this.position.x(), + "Y: " + this.position.y(), + "Z: " + this.position.z(), + "World: " + this.world + )); + itemStack.setItemMeta(meta); + + return itemStack; + } + @Override public boolean equals(Object obj) { if (this == obj) diff --git a/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/db/CoordinatesDatabaseManager.java b/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/db/CoordinatesDatabaseManager.java index 62c36ba..aa2e5b5 100644 --- a/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/db/CoordinatesDatabaseManager.java +++ b/ic_plugin_coordinates/src/main/java/nl/interestingcorner/coordinates/db/CoordinatesDatabaseManager.java @@ -11,6 +11,7 @@ import java.util.logging.Level; import org.bukkit.plugin.java.JavaPlugin; import nl.interestingcorner.core.MinecraftColor; +import nl.interestingcorner.core.db.DatabaseManager; public enum CoordinatesDatabaseManager implements nl.interestingcorner.core.db.DatabaseInitializeListener{ @@ -21,6 +22,7 @@ public enum CoordinatesDatabaseManager implements nl.interestingcorner.core.db.D public void initialize(JavaPlugin app) { this.app = app; + DatabaseManager.INSTANCE.registerDatabaseInitializeListener(this); } /** @@ -156,6 +158,7 @@ public enum CoordinatesDatabaseManager implements nl.interestingcorner.core.db.D if (!initializeTables()) { this.app.getLogger().severe("Could not initialize coordinates database tables"); } + this.app.getLogger().info("Coordinates database tables initialized"); } } diff --git a/ic_plugin_core/src/main/java/nl/interestingcorner/core/db/DatabaseManager.java b/ic_plugin_core/src/main/java/nl/interestingcorner/core/db/DatabaseManager.java index 379da1e..53f8f89 100644 --- a/ic_plugin_core/src/main/java/nl/interestingcorner/core/db/DatabaseManager.java +++ b/ic_plugin_core/src/main/java/nl/interestingcorner/core/db/DatabaseManager.java @@ -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) { 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 new file mode 100644 index 0000000..ba8f224 --- /dev/null +++ b/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/GUI.java @@ -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'"); + } + +} 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 new file mode 100644 index 0000000..63f59e6 --- /dev/null +++ b/ic_plugin_core/src/main/java/nl/interestingcorner/core/gui/GUIBuilder.java @@ -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 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; + } +} diff --git a/install_and_jar.sh b/install_and_jar.sh index c85a6a9..03404ed 100755 --- a/install_and_jar.sh +++ b/install_and_jar.sh @@ -1,4 +1,5 @@ #!/bin/bash -mvn install -f "/home/sem/Development/Minecraft/mc-ic-server/ic_plugin/pom.xml" -mvn jar:jar -f "/home/sem/Development/Minecraft/mc-ic-server/ic_plugin/pom.xml" +mvn install -f "/home/sem/Development/Minecraft/mc-ic-server/pom.xml" +scp ic_plugin_core/target/ic_plugin_core-1.0-SNAPSHOT.jar sem@10.10.100.50:/home/sem/minecraft/plugins +scp ic_plugin_coordinates/target/ic_plugin_coordinates-1.0-SNAPSHOT.jar sem@10.10.100.50:/home/sem/minecraft/plugins \ No newline at end of file