package dev.loki.loparkour.menu.settings; import dev.loki.loparkour.config.locale.Locales; import dev.loki.loparkour.menu.core.LPMenu; import dev.loki.loparkour.menu.core.Menus; import dev.loki.loparkour.menu.core.screen.ParkourOption; import dev.loki.loparkour.player.core.ParkourPlayer; import dev.loki.loparkour.player.core.ParkourUser; import dev.loki.loparkour.menu.gui.inventory.InventoryGui; import dev.loki.loparkour.player.service.UserRegistry; import dev.loki.loparkour.session.core.Session; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import java.util.List; public class SettingsMenu extends LPMenu { private static final int ROWS = 3; private static final int SLOT_PARKOUR_SETTINGS = 11; private static final int SLOT_LANG = 13; private static final int SLOT_CHAT = 15; private static final int SLOT_CLOSE = 22; @Override public void open(@NotNull Player player) { final String locale = locale(player); final String title = Locales.getString(locale, "settings.name"); InventoryGui gui = baseGui(title, ROWS); if (ParkourOption.PARKOUR_SETTINGS.mayPerform(player) && UserRegistry.isPlayer(player)) { gui = gui.setItem(SLOT_PARKOUR_SETTINGS, localeItem(player, "settings.parkour_settings.item"), e -> { final ParkourPlayer pp = UserRegistry.getPlayer(player); if (pp != null) { pp.session.generator().menu(pp); } }); } if (ParkourOption.LANG.mayPerform(player) && ParkourUser.isUser(player)) { final String langName = Locales.getString(locale, "name"); gui = gui.setItem(SLOT_LANG, localeItem(locale, "settings.lang.item", langName), e -> { final ParkourPlayer pp = UserRegistry.getPlayer(player); if (pp != null) { Menus.LANG.open(pp); } }); } final ParkourUser user = ParkourUser.getUser(player); if (ParkourOption.CHAT.mayPerform(player) && user != null) { gui = gui.setItem(SLOT_CHAT, chatItem(user), e -> { user.setChatType(user.chatType().next()); open(player); }); } gui.setItem(SLOT_CLOSE, closeButton(player), e -> player.closeInventory()) .open(player); } /** Scope button — the locale lists its values in {@link Session.ChatType#next()} order. */ private ItemStack chatItem(@NotNull ParkourUser user) { final String locale = user.locale(); final List values = Locales.getStringList(locale, "settings.chat.values"); final Session.ChatType chatType = user.chatType(); final String label = chatType.ordinal() < values.size() ? values.get(chatType.ordinal()) : chatType.name(); return localeItem(locale, "settings.chat", label); } }