From 97dbbfc67d332676126c0518b07dd2cb6966da33 Mon Sep 17 00:00:00 2001 From: m1kau Date: Sun, 28 Jun 2026 08:33:15 -0400 Subject: [PATCH] feat(*): Added icon changing for waystones and fixed inventory bugs --- .../quickwaystones/data/WaystoneData.java | 13 +++++++- .../quickwaystones/gui/WaystoneGUI.java | 30 +++++++++++++++++-- .../quickwaystones/managers/DataManager.java | 12 +++++++- src/main/resources/config.yml | 3 +- 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/pozzoo/quickwaystones/data/WaystoneData.java b/src/main/java/dev/pozzoo/quickwaystones/data/WaystoneData.java index 04948ab..af483d7 100644 --- a/src/main/java/dev/pozzoo/quickwaystones/data/WaystoneData.java +++ b/src/main/java/dev/pozzoo/quickwaystones/data/WaystoneData.java @@ -2,6 +2,7 @@ import dev.pozzoo.quickwaystones.QuickWaystones; import org.bukkit.Location; +import org.bukkit.Material; import java.util.UUID; @@ -11,6 +12,7 @@ public class WaystoneData { private final UUID owner; private final Location location; private int direction = 0; + private Material icon = Material.ENDER_PEARL; public WaystoneData(Location location, UUID owner) { id = QuickWaystones.getAndIncrementLastWaystoneID(); @@ -18,12 +20,13 @@ public WaystoneData(Location location, UUID owner) { this.location = location; this.owner = owner; } - public WaystoneData(Integer id, String name, Location location, UUID owner, int direction) { + public WaystoneData(Integer id, String name, Location location, UUID owner, int direction, Material icon) { this.id = id; this.name = name; this.location = location; this.owner = owner; this.direction = direction; + this.icon = icon; } public int getId() { @@ -54,6 +57,14 @@ public void setDirection(int direction) { this.direction = direction; } + public Material getIcon() { + return icon; + } + + public void setIcon(Material icon) { + this.icon = icon; + } + @Override public String toString() { return "WaystoneData{" + diff --git a/src/main/java/dev/pozzoo/quickwaystones/gui/WaystoneGUI.java b/src/main/java/dev/pozzoo/quickwaystones/gui/WaystoneGUI.java index 7cc97cd..8dee0e0 100644 --- a/src/main/java/dev/pozzoo/quickwaystones/gui/WaystoneGUI.java +++ b/src/main/java/dev/pozzoo/quickwaystones/gui/WaystoneGUI.java @@ -9,6 +9,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; @@ -71,7 +72,7 @@ private static void openPage(Player player, int page, WaystoneData waystoneData) int slot = 0; for (int i = startIndex; i < endIndex; i++) { WaystoneData ws = waystones.get(i); - ItemStack item = new ItemStack(Material.ENDER_PEARL); + ItemStack item = new ItemStack(ws.getIcon()); ItemMeta meta = item.getItemMeta(); if (meta != null) { meta.displayName(StringUtils.formatItemName(ws.getName())); @@ -133,7 +134,6 @@ public void onInventoryClick(InventoryClickEvent event) { if (!(event.getInventory().getHolder() instanceof WaystoneHolder holder)) { return; } - event.setCancelled(true); if (!(event.getWhoClicked() instanceof Player player)) { return; @@ -142,8 +142,12 @@ public void onInventoryClick(InventoryClickEvent event) { int slot = event.getRawSlot(); // Only handle clicks inside the top inventory if (slot < 0 || slot >= INVENTORY_SIZE) { + if (event.isShiftClick()) { + event.setCancelled(true); + } return; } + event.setCancelled(true); // Pagination if (slot == PREV_SLOT && holder.page > 0) { @@ -158,6 +162,17 @@ public void onInventoryClick(InventoryClickEvent event) { // Waystone teleport WaystoneData ws = holder.slotToWaystone.get(slot); if (ws != null) { + ItemStack cursor = event.getCursor(); + if (cursor != null && cursor.getType() != Material.AIR) { + ws.setIcon(cursor.getType()); + QuickWaystones.saveData(); + String message = QuickWaystones.getInstance().getConfig().getString("Messages.WaystoneIconChanged", "Waystone icon changed!"); + player.sendMessage(StringUtils.formatString("" + message)); + player.playSound(player, Sound.BLOCK_NOTE_BLOCK_PLING, 0.5f, 1.5f); + openPage(player, holder.page, holder.waystoneData); + return; + } + if (ws.getId() == holder.waystoneData.getId()) { String message = QuickWaystones.getInstance().getConfig().getString("Messages.SameWaystone", "You cannot teleport to the same waystone!"); player.sendMessage(StringUtils.formatString("" + message)); @@ -188,4 +203,15 @@ public void onInventoryClick(InventoryClickEvent event) { player.closeInventory(); } } + + @EventHandler + public void onInventoryDrag(InventoryDragEvent event) { + if (!(event.getInventory().getHolder() instanceof WaystoneHolder)) { + return; + } + boolean affectsGui = event.getRawSlots().stream().anyMatch(slot -> slot < INVENTORY_SIZE); + if (affectsGui) { + event.setCancelled(true); + } + } } diff --git a/src/main/java/dev/pozzoo/quickwaystones/managers/DataManager.java b/src/main/java/dev/pozzoo/quickwaystones/managers/DataManager.java index c6eb650..c082754 100644 --- a/src/main/java/dev/pozzoo/quickwaystones/managers/DataManager.java +++ b/src/main/java/dev/pozzoo/quickwaystones/managers/DataManager.java @@ -3,6 +3,7 @@ import dev.pozzoo.quickwaystones.QuickWaystones; import dev.pozzoo.quickwaystones.data.WaystoneData; import java.io.File; +import org.bukkit.Material; import java.io.IOException; import java.util.ArrayList; import java.util.Comparator; @@ -81,12 +82,20 @@ public int loadData() { } int id = Integer.parseInt(key); + String iconName = config.getString(basePath + ".icon", "ENDER_PEARL"); + Material icon; + try { + icon = Material.valueOf(iconName); + } catch (IllegalArgumentException e) { + icon = Material.ENDER_PEARL; + } WaystoneData waystoneData = new WaystoneData( id, config.getString(basePath + ".name", "Waystone " + id), location, UUID.fromString(ownerValue), - config.getInt(basePath + ".direction", 0) + config.getInt(basePath + ".direction", 0), + icon ); QuickWaystones.getWaystonesMap().put( waystoneData.getLocation(), @@ -142,6 +151,7 @@ public void saveData( config.set(basePath + ".location", waystone.getLocation()); config.set(basePath + ".owner", waystone.getOwner().toString()); config.set(basePath + ".direction", waystone.getDirection()); + config.set(basePath + ".icon", waystone.getIcon().name()); } playerAccess diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 0112d91..2863a9c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -13,4 +13,5 @@ Messages: SetWaystoneNorth: "Set To Spawn North" SetWaystoneSouth: "Set To Spawn South" SetWaystoneEast: "Set To Spawn East" - SetWaystoneWest: "Set To Spawn West" \ No newline at end of file + SetWaystoneWest: "Set To Spawn West" + WaystoneIconChanged: "Waystone icon changed!" \ No newline at end of file