diff --git a/resources/ChangeLog.txt b/resources/ChangeLog.txt index 1c7ec1c74a..6d97728177 100644 --- a/resources/ChangeLog.txt +++ b/resources/ChangeLog.txt @@ -7601,4 +7601,6 @@ v0.92.0.11: - Bump language files to 0.152. - Fix jailcells being able to be placed where a jailcell already exists. - Make the plot perm hud translatable. - - Fix potential NPE in SelectionGUI. \ No newline at end of file + - Fix potential NPE in SelectionGUI. + - Fix the back button on the switch/itemuse/allowedblocks GUIs not working from the first page. + - Closes #6027. \ No newline at end of file diff --git a/src/com/palmergames/bukkit/towny/listeners/TownyInventoryListener.java b/src/com/palmergames/bukkit/towny/listeners/TownyInventoryListener.java index 4347912d5d..fcf04c1240 100644 --- a/src/com/palmergames/bukkit/towny/listeners/TownyInventoryListener.java +++ b/src/com/palmergames/bukkit/towny/listeners/TownyInventoryListener.java @@ -113,6 +113,7 @@ public void onClick(InventoryClickEvent event) { case ITEMUSE -> Translatable.of("gui_title_towny_itemuse").forLocale(resident); }; + resident.setGUISelectionType(selectionGUI.getType()); selectionGUI.playClickSound(player); ResidentUtil.openGUIInventory(resident, materialSet, title); } else { diff --git a/src/com/palmergames/bukkit/towny/object/Resident.java b/src/com/palmergames/bukkit/towny/object/Resident.java index 5d326d3987..c0a42f3f97 100644 --- a/src/com/palmergames/bukkit/towny/object/Resident.java +++ b/src/com/palmergames/bukkit/towny/object/Resident.java @@ -18,6 +18,7 @@ import com.palmergames.bukkit.towny.invites.InviteReceiver; import com.palmergames.bukkit.towny.invites.exceptions.TooManyInvitesException; import com.palmergames.bukkit.towny.object.economy.Account; +import com.palmergames.bukkit.towny.object.gui.SelectionGUI.SelectionType; import com.palmergames.bukkit.towny.object.jail.Jail; import com.palmergames.bukkit.towny.object.metadata.BooleanDataField; import com.palmergames.bukkit.towny.object.metadata.CustomDataField; @@ -78,6 +79,7 @@ public class Resident extends TownyObject implements InviteReceiver, EconomyHand private ArrayList guiPages; private int guiPageNum = 0; + private SelectionType guiSelectionType; private int respawnProtectionTaskID = -1; private boolean respawnPickupWarningShown = false; // Prevents chat spam when a player attempts to pick up an item while under respawn protection. @@ -845,6 +847,14 @@ public void setGUIPageNum(int currentInventoryPage) { this.guiPageNum = currentInventoryPage; } + public SelectionType getGUISelectionType() { + return guiSelectionType; + } + + public void setGUISelectionType(SelectionType selectionType) { + this.guiSelectionType = selectionType; + } + @Override public void save() { TownyUniverse.getInstance().getDataSource().saveResident(this); diff --git a/src/com/palmergames/bukkit/towny/object/TownyInventory.java b/src/com/palmergames/bukkit/towny/object/TownyInventory.java index 702c28361f..6fb21b1ea4 100644 --- a/src/com/palmergames/bukkit/towny/object/TownyInventory.java +++ b/src/com/palmergames/bukkit/towny/object/TownyInventory.java @@ -1,6 +1,7 @@ package com.palmergames.bukkit.towny.object; import com.palmergames.bukkit.towny.Towny; +import com.palmergames.bukkit.towny.utils.ResidentUtil; import com.palmergames.bukkit.util.Colors; import net.kyori.adventure.key.Key; import net.kyori.adventure.sound.Sound; @@ -56,6 +57,11 @@ public void tryPaginate(ItemStack clickedItem, Player player, Resident resident, resident.setGUIPageNum(--currentPage); new TownyInventory(resident, resident.getGUIPage(), inventoryView.getTitle()); playClickSound(player); + } else if (resident.getGUIPageNum() == 0) { + // No page to go back from: go back to the SelectionGUI for the SelectionType + // that the resident is currently browsing, let them choose a different plot type. + playClickSound(player); + ResidentUtil.openSelectionGUI(resident, resident.getGUISelectionType()); } } } catch (Exception ignored) {}