Skip to content

Commit 012ef5e

Browse files
committed
move parent menu logic to MenuManager
1 parent 5611e54 commit 012ef5e

4 files changed

Lines changed: 23 additions & 30 deletions

File tree

src/main/java/me/hsgamer/bettergui/action/type/BackAction.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package me.hsgamer.bettergui.action.type;
22

3+
import me.hsgamer.bettergui.BetterGUI;
34
import me.hsgamer.bettergui.api.menu.Menu;
45
import me.hsgamer.bettergui.builder.ActionBuilder;
6+
import me.hsgamer.bettergui.manager.MenuManager;
57
import me.hsgamer.bettergui.util.SchedulerUtil;
68
import me.hsgamer.hscore.action.common.Action;
79
import me.hsgamer.hscore.common.StringReplacer;
@@ -34,7 +36,7 @@ public void apply(UUID uuid, TaskProcess process, StringReplacer stringReplacer)
3436
? stringReplacer.replaceOrOriginal(value, uuid).split(" ")
3537
: new String[0];
3638

37-
Runnable runnable = menu.getParentMenu(uuid)
39+
Runnable runnable = BetterGUI.getInstance().get(MenuManager.class).getParentMenu(uuid, menu)
3840
.<Runnable>map(parentMenu -> () -> parentMenu.create(player, args, bypass))
3941
.orElse(player::closeInventory);
4042
SchedulerUtil.entity(player)

src/main/java/me/hsgamer/bettergui/api/menu/Menu.java

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package me.hsgamer.bettergui.api.menu;
22

3+
import me.hsgamer.bettergui.BetterGUI;
34
import me.hsgamer.bettergui.api.element.MenuElement;
5+
import me.hsgamer.bettergui.manager.MenuManager;
46
import me.hsgamer.hscore.common.StringReplacer;
57
import me.hsgamer.hscore.config.Config;
68
import org.bukkit.entity.Player;
@@ -19,7 +21,6 @@ public abstract class Menu implements MenuElement {
1921
public static final String MENU_SETTINGS_PATH = "menu-settings";
2022

2123
protected final Config config;
22-
private final Map<UUID, Menu> parentMenu = new HashMap<>();
2324

2425
/**
2526
* Create a new menu
@@ -63,7 +64,7 @@ public StringReplacer getStringReplacer() {
6364
@Override
6465
public @Nullable String replace(@NotNull String original, @NotNull UUID uuid) {
6566
if (original.equalsIgnoreCase("parent-menu")) {
66-
return getParentMenu(uuid).map(Menu::getName).orElse(null);
67+
return BetterGUI.getInstance().get(MenuManager.class).getParentMenu(uuid, Menu.this).map(Menu::getName).orElse(null);
6768
}
6869
return replace(original);
6970
}
@@ -116,29 +117,4 @@ public List<String> tabComplete(Player player, String[] args) {
116117
* Close/Clear all inventories of the type
117118
*/
118119
public abstract void closeAll();
119-
120-
/**
121-
* Get the former menu that opened this menu
122-
*
123-
* @param uuid the unique id
124-
*
125-
* @return the former menu
126-
*/
127-
public Optional<Menu> getParentMenu(UUID uuid) {
128-
return Optional.ofNullable(parentMenu.get(uuid));
129-
}
130-
131-
/**
132-
* Set the former menu
133-
*
134-
* @param uuid the unique id
135-
* @param menu the former menu
136-
*/
137-
public void setParentMenu(UUID uuid, Menu menu) {
138-
if (menu == null) {
139-
parentMenu.remove(uuid);
140-
} else {
141-
parentMenu.put(uuid, menu);
142-
}
143-
}
144120
}

src/main/java/me/hsgamer/bettergui/manager/MenuManager.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import java.io.File;
1313
import java.util.*;
14+
import java.util.concurrent.ConcurrentHashMap;
1415
import java.util.logging.Level;
1516

1617
/**
@@ -19,6 +20,7 @@
1920
public final class MenuManager implements Loadable, PostEnable {
2021

2122
private final Map<String, Menu> menuMap = new HashMap<>();
23+
private final Map<UUID, Map<Menu, Menu>> parentMenuMap = new ConcurrentHashMap<>();
2224
private final BetterGUI plugin;
2325
private final File menusFolder;
2426

@@ -128,10 +130,22 @@ public void openMenu(String name, Player player, String[] args, boolean bypass)
128130
*/
129131
public void openMenu(String name, Player player, String[] args, Menu parentMenu, boolean bypass) {
130132
Menu menu = menuMap.get(name);
131-
menu.setParentMenu(player.getUniqueId(), parentMenu);
133+
parentMenuMap.computeIfAbsent(player.getUniqueId(), k -> new ConcurrentHashMap<>()).put(menu, parentMenu);
132134
menu.create(player, args, bypass);
133135
}
134136

137+
/**
138+
* Get the parent menu of the menu
139+
*
140+
* @param uuid the unique id
141+
* @param menu the menu
142+
*
143+
* @return the parent menu
144+
*/
145+
public Optional<Menu> getParentMenu(UUID uuid, Menu menu) {
146+
return Optional.ofNullable(parentMenuMap.get(uuid)).map(map -> map.get(menu));
147+
}
148+
135149
/**
136150
* Get the list of the tab complete
137151
*

src/main/java/me/hsgamer/bettergui/menu/PredicateMenu.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ public boolean create(Player player, String[] args, boolean bypass) {
101101
if (result.isSuccess) {
102102
MenuProcess menuProcess = pair.getValue();
103103
String[] finalArgs = StringReplacerApplier.replace(menuProcess.args, uuid, this).split("\\s+");
104-
BetterGUI.getInstance().get(MenuManager.class).openMenu(menuProcess.menu, player, finalArgs, getParentMenu(uuid).orElse(null), bypass);
104+
MenuManager menuManager = BetterGUI.getInstance().get(MenuManager.class);
105+
menuManager.openMenu(menuProcess.menu, player, finalArgs, menuManager.getParentMenu(uuid, this).orElse(null), bypass);
105106
isSuccessful = true;
106107
break;
107108
}

0 commit comments

Comments
 (0)