1919
2020public class WaystoneGUI implements Listener {
2121
22- private static final int ROWS = 4 ;
23- private static final int PAGE_SIZE = 27 ; // top 3 rows
22+ private static final int ROWS = 6 ;
23+ private static final int PAGE_SIZE = 45 ; // top 5 rows
2424 private static final int INVENTORY_SIZE = ROWS * 9 ;
25- private static final int PREV_SLOT = 27 + (3 - 1 ); // 29
26- private static final int NEXT_SLOT = 27 + (7 - 1 ); // 33
27- private static final int PAGE_SLOT = 27 + (5 - 1 ); // 31
25+ private static final int PREV_SLOT = 45 + (3 - 1 ); // 47
26+ private static final int NEXT_SLOT = 45 + (7 - 1 ); // 51
27+ private static final int PAGE_SLOT = 45 + (5 - 1 ); // 49
2828
2929 private static volatile boolean registered = false ;
3030
@@ -48,13 +48,16 @@ private static void ensureRegistered() {
4848
4949 private static void openPage (Player player , int page , WaystoneData waystoneData ) {
5050 Map <Location , WaystoneData > waystonesMap = new HashMap <>(QuickWaystones .getWaystonesMap ());
51- Map <UUID , Set <Integer >> playerAccess = QuickWaystones .getPlayerAccess ();
51+ Map <UUID , Set <String >> playerAccess = QuickWaystones .getPlayerAccess ();
5252
5353 if (QuickWaystones .getInstance ().getConfig ().getBoolean ("Settings.HideUndiscoveredWaystones" )) {
5454 waystonesMap .entrySet ().removeIf (entry -> !playerAccess .get (player .getUniqueId ()).contains (entry .getValue ().getId ()));
5555 }
5656
5757 List <WaystoneData > waystones = new ArrayList <>(waystonesMap .values ());
58+
59+ // Sort waystones by name
60+ waystones .sort (Comparator .comparing (WaystoneData ::getName ));
5861
5962 int totalItems = waystones .size ();
6063 int totalPages = Math .max (1 , (int ) Math .ceil (totalItems / (double ) PAGE_SIZE ));
@@ -65,13 +68,28 @@ private static void openPage(Player player, int page, WaystoneData waystoneData)
6568 WaystoneHolder holder = new WaystoneHolder (currentPage , totalPages , waystoneData );
6669 Inventory inv = Bukkit .createInventory (holder , INVENTORY_SIZE , title );
6770
68- // Fill page items (top 27 slots)
71+ // Fill page items (top 45 slots)
6972 int startIndex = currentPage * PAGE_SIZE ;
7073 int endIndex = Math .min (startIndex + PAGE_SIZE , totalItems );
7174 int slot = 0 ;
7275 for (int i = startIndex ; i < endIndex ; i ++) {
7376 WaystoneData ws = waystones .get (i );
74- ItemStack item = new ItemStack (Material .ENDER_PEARL );
77+
78+ // Get world-specific icon
79+ Material material ;
80+ switch (ws .getLocation ().getWorld ().getEnvironment ()) {
81+ case NETHER :
82+ material = Material .NETHERRACK ;
83+ break ;
84+ case THE_END :
85+ material = Material .END_STONE ;
86+ break ;
87+ default :
88+ material = Material .GRASS_BLOCK ;
89+ break ;
90+ }
91+
92+ ItemStack item = new ItemStack (material );
7593 ItemMeta meta = item .getItemMeta ();
7694 if (meta != null ) {
7795 meta .displayName (StringUtils .formatItemName (ws .getName ()));
@@ -158,7 +176,7 @@ public void onInventoryClick(InventoryClickEvent event) {
158176 // Waystone teleport
159177 WaystoneData ws = holder .slotToWaystone .get (slot );
160178 if (ws != null ) {
161- if (ws .getId () == holder .waystoneData .getId ()) {
179+ if (ws .getId (). equals ( holder .waystoneData .getId () )) {
162180 String message = QuickWaystones .getInstance ().getConfig ().getString ("Messages.SameWaystone" , "You cannot teleport to the same waystone!" );
163181 player .sendMessage (StringUtils .formatString ("<red>" + message ));
164182 player .playSound (player , Sound .ENTITY_GENERIC_EXTINGUISH_FIRE , 0.1f , 1 );
0 commit comments