- ElytraGenerator no longer hardcodes Modes.elytra(): the mode is passed through the constructor (canonical (session, pointType, mode) plus two convenience overloads); CloseGenerator/MinSpeed/Obstacle/SpeedDemon/ TimeTrial now declare their own mode, so getMode() is reachable - Session.ChatType gets next(); ParkourUser gets setChatType(); SettingsMenu gains a chat-scope cycle button (slot 15) so LOBBY_ONLY/PLAYERS_ONLY are no longer dead branches - ChatTypeTest covers the cycle order and wrap-around - TODO.md: PROGRESS-8 records both fixes checkstyle 0 error / 135 warning, PMD 0, tests 96/0 fail (1 skipped)
72 lines
2.9 KiB
Java
72 lines
2.9 KiB
Java
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<String> 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);
|
|
}
|
|
}
|