Update dependencies and improve configuration management
- Updated LoLib dependency to version 3.0.0 in build.gradle.kts - Added HikariCP and MySQL connector dependencies for improved database handling - Enhanced jar minimization process to exclude JDBC pool and driver - Refactored configuration management by introducing ConfigAccessor and ConfigLoader for better file handling and validation - Removed deprecated GenerationOptions class and integrated its functionality into the new structure - Improved command error handling and added cooldown hints for admin commands
This commit is contained in:
parent
978f739045
commit
3100c53229
86 changed files with 4324 additions and 3248 deletions
|
|
@ -27,7 +27,7 @@ public abstract class DynamicMenu {
|
|||
* @param item The item
|
||||
* @param shouldDisplay Whether this item should be displayed right now.
|
||||
*/
|
||||
// TODO: Migrate to LoLib GUI system
|
||||
// Stub: migrate to LoLib GUI when dynamic rows are wired up.
|
||||
/*
|
||||
public void registerMainItem(int row, int id, BiFunction<@NotNull Player, @Nullable ParkourUser, dev.loki.loparkour.util.MenuItem> item, Predicate<Player> shouldDisplay) {
|
||||
if (id < 0 || row < 0 || row > 4) {
|
||||
|
|
@ -50,7 +50,7 @@ public abstract class DynamicMenu {
|
|||
* @param player The player
|
||||
* @param menu The menu
|
||||
*/
|
||||
// TODO: Migrate to LoLib GUI system
|
||||
// Stub: migrate to LoLib GUI when dynamic rows are wired up.
|
||||
/*
|
||||
public void display(Player player, Menu menu) {
|
||||
ParkourUser user = ParkourUser.getUser(player);
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ public abstract class LPMenu {
|
|||
|
||||
protected String locale(@NotNull Player player) {
|
||||
var user = dev.loki.loparkour.player.ParkourUser.getUser(player);
|
||||
return user != null ? user.locale : Option.OPTIONS_DEFAULTS.get(ParkourOption.LANG);
|
||||
String loc = user != null ? user.locale : Option.OPTIONS_DEFAULTS.get(ParkourOption.LANG);
|
||||
return (loc != null && !loc.isBlank()) ? loc : "en";
|
||||
}
|
||||
|
||||
protected ItemStack filler() {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package dev.loki.loparkour.menu;
|
|||
import dev.loki.loparkour.config.Config;
|
||||
import dev.loki.loparkour.config.Locales;
|
||||
import dev.loki.loparkour.player.ParkourUser;
|
||||
import dev.loki.loparkour.util.ColorUtil;
|
||||
import dev.lolib.gui.InventoryGUI;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
|
|
|||
|
|
@ -1,34 +1,8 @@
|
|||
package dev.loki.loparkour.menu;
|
||||
|
||||
import dev.loki.loparkour.leaderboard.Leaderboard;
|
||||
import dev.loki.loparkour.mode.Mode;
|
||||
import dev.loki.loparkour.player.ParkourPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* Temporary stub for menu system during migration
|
||||
* TODO: Implement proper menu system using LoLib GUI or custom implementation
|
||||
* Placeholder during menu migration; real flows use {@link Menus} / LoLib GUI.
|
||||
*/
|
||||
public class MenuStub {
|
||||
|
||||
// TODO: Migrate to LoLib GUI system
|
||||
/*
|
||||
public void open(Player player) {
|
||||
player.sendMessage("§cМеню временно недоступно во время миграции");
|
||||
}
|
||||
*/
|
||||
|
||||
// TODO: Migrate to LoLib GUI system
|
||||
/*
|
||||
public void open(Player player, Mode mode, Leaderboard.Sort sort) {
|
||||
player.sendMessage("§cМеню временно недоступно во время миграции");
|
||||
}
|
||||
*/
|
||||
|
||||
// TODO: Migrate to LoLib GUI system
|
||||
/*
|
||||
public void open(ParkourPlayer player) {
|
||||
player.player.sendMessage("§cМеню временно недоступно во время миграции");
|
||||
}
|
||||
*/
|
||||
public final class MenuStub {
|
||||
private MenuStub() {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,8 +7,7 @@ import dev.loki.loparkour.menu.LPMenu;
|
|||
import dev.loki.loparkour.menu.Menus;
|
||||
import dev.loki.loparkour.menu.ParkourOption;
|
||||
import dev.loki.loparkour.mode.Mode;
|
||||
import dev.loki.loparkour.util.ColorUtil;
|
||||
import dev.lolib.gui.ScrollableGUI;
|
||||
import dev.lolib.gui.InventoryGUI;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
|
@ -18,8 +17,16 @@ import java.util.List;
|
|||
|
||||
public class LeaderboardsMenu extends LPMenu {
|
||||
|
||||
private static final int ITEMS_PER_PAGE = 7; // Slots 10-16 (middle row)
|
||||
private int currentPage = 0;
|
||||
|
||||
@Override
|
||||
public void open(@NotNull Player player) {
|
||||
open(player, 0);
|
||||
}
|
||||
|
||||
public void open(@NotNull Player player, int page) {
|
||||
this.currentPage = page;
|
||||
String locale = locale(player);
|
||||
String title = Locales.getString(locale, ParkourOption.LEADERBOARDS.path + ".name");
|
||||
|
||||
|
|
@ -39,18 +46,32 @@ public class LeaderboardsMenu extends LPMenu {
|
|||
return;
|
||||
}
|
||||
|
||||
ScrollableGUI gui = ScrollableGUI.create()
|
||||
.title(ColorUtil.color(title))
|
||||
.rows(3)
|
||||
.scrollUpButton(backItem(), 0)
|
||||
.scrollDownButton(nextItem(), 8);
|
||||
// Calculate pagination
|
||||
int totalPages = (int) Math.ceil((double) items.size() / ITEMS_PER_PAGE);
|
||||
int startIndex = currentPage * ITEMS_PER_PAGE;
|
||||
int endIndex = Math.min(startIndex + ITEMS_PER_PAGE, items.size());
|
||||
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
InventoryGUI gui = baseGui(title, 3);
|
||||
|
||||
// Add items for current page
|
||||
for (int i = startIndex; i < endIndex; i++) {
|
||||
final Mode mode = modes.get(i);
|
||||
gui = gui.addItem(items.get(i),
|
||||
int slot = 10 + (i - startIndex); // Slots 10-16
|
||||
gui = gui.setItem(slot, items.get(i),
|
||||
e -> Menus.SINGLE_LEADERBOARD.open(player, mode, Leaderboard.Sort.SCORE));
|
||||
}
|
||||
|
||||
// Add navigation buttons
|
||||
if (currentPage > 0) {
|
||||
// Previous page button
|
||||
gui = gui.setItem(0, backItem(), e -> open(player, currentPage - 1));
|
||||
}
|
||||
|
||||
if (currentPage < totalPages - 1) {
|
||||
// Next page button
|
||||
gui = gui.setItem(8, nextItem(), e -> open(player, currentPage + 1));
|
||||
}
|
||||
|
||||
gui.open(player);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,8 +7,7 @@ import dev.loki.loparkour.menu.LPMenu;
|
|||
import dev.loki.loparkour.menu.ParkourOption;
|
||||
import dev.loki.loparkour.mode.Mode;
|
||||
import dev.loki.loparkour.player.ParkourUser;
|
||||
import dev.loki.loparkour.util.ColorUtil;
|
||||
import dev.lolib.gui.ScrollableGUI;
|
||||
import dev.lolib.gui.InventoryGUI;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
@ -24,7 +23,15 @@ import java.util.UUID;
|
|||
|
||||
public class SingleLeaderboardMenu extends LPMenu {
|
||||
|
||||
private static final int ITEMS_PER_PAGE = 7; // Slots 10-16 (middle row)
|
||||
private int currentPage = 0;
|
||||
|
||||
public void open(@NotNull Player player, @NotNull Mode mode, @NotNull Leaderboard.Sort sort) {
|
||||
open(player, mode, sort, 0);
|
||||
}
|
||||
|
||||
public void open(@NotNull Player player, @NotNull Mode mode, @NotNull Leaderboard.Sort sort, int page) {
|
||||
this.currentPage = page;
|
||||
Leaderboard leaderboard = mode.getLeaderboard();
|
||||
if (leaderboard == null) return;
|
||||
|
||||
|
|
@ -66,14 +73,28 @@ public class SingleLeaderboardMenu extends LPMenu {
|
|||
items.add(skull);
|
||||
}
|
||||
|
||||
ScrollableGUI gui = ScrollableGUI.create()
|
||||
.title(ColorUtil.color(title))
|
||||
.rows(3)
|
||||
.scrollUpButton(backItem(), 0)
|
||||
.scrollDownButton(nextItem(), 8);
|
||||
// Calculate pagination
|
||||
int totalPages = (int) Math.ceil((double) items.size() / ITEMS_PER_PAGE);
|
||||
int startIndex = currentPage * ITEMS_PER_PAGE;
|
||||
int endIndex = Math.min(startIndex + ITEMS_PER_PAGE, items.size());
|
||||
|
||||
for (ItemStack item : items) {
|
||||
gui = gui.addItem(item, e -> { /* view only */ });
|
||||
InventoryGUI gui = baseGui(title, 3);
|
||||
|
||||
// Add items for current page
|
||||
for (int i = startIndex; i < endIndex; i++) {
|
||||
int slot = 10 + (i - startIndex); // Slots 10-16
|
||||
gui = gui.setItem(slot, items.get(i), e -> { /* view only */ });
|
||||
}
|
||||
|
||||
// Add navigation buttons
|
||||
if (currentPage > 0) {
|
||||
// Previous page button
|
||||
gui = gui.setItem(0, backItem(), e -> open(player, mode, sort, currentPage - 1));
|
||||
}
|
||||
|
||||
if (currentPage < totalPages - 1) {
|
||||
// Next page button
|
||||
gui = gui.setItem(8, nextItem(), e -> open(player, mode, sort, currentPage + 1));
|
||||
}
|
||||
|
||||
gui.open(player);
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import dev.loki.loparkour.config.Locales;
|
|||
import dev.loki.loparkour.menu.LPMenu;
|
||||
import dev.loki.loparkour.menu.Menus;
|
||||
import dev.loki.loparkour.menu.ParkourOption;
|
||||
import dev.lolib.gui.InventoryGUI;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
|
|
|||
|
|
@ -5,23 +5,27 @@ import dev.loki.loparkour.config.Config;
|
|||
import dev.loki.loparkour.config.Locales;
|
||||
import dev.loki.loparkour.menu.LPMenu;
|
||||
import dev.loki.loparkour.mode.Mode;
|
||||
import dev.loki.loparkour.mode.MultiMode;
|
||||
import dev.loki.loparkour.player.ParkourUser;
|
||||
import dev.loki.loparkour.util.ColorUtil;
|
||||
import dev.lolib.gui.ScrollableGUI;
|
||||
import dev.lolib.gui.InventoryGUI;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SingleMenu extends LPMenu {
|
||||
|
||||
private static final int ITEMS_PER_PAGE = 7; // Slots 10-16 (middle row)
|
||||
private int currentPage = 0;
|
||||
|
||||
@Override
|
||||
public void open(@NotNull Player player) {
|
||||
open(player, 0);
|
||||
}
|
||||
|
||||
public void open(@NotNull Player player, int page) {
|
||||
this.currentPage = page;
|
||||
String locale = locale(player);
|
||||
|
||||
List<Mode> availableModes = new ArrayList<>();
|
||||
|
|
@ -32,7 +36,7 @@ public class SingleMenu extends LPMenu {
|
|||
if (mode.getName().equals("spectator")) continue;
|
||||
|
||||
// Check if mode is enabled in config
|
||||
if (!Config.CONFIG.getBoolean("modes." + mode.getName() + ".enabled")) continue;
|
||||
if (!Config.CONFIG.getBoolean("modes." + mode.getName() + ".enabled", true)) continue;
|
||||
|
||||
boolean blocked = Config.CONFIG.getBoolean("permissions.enabled")
|
||||
&& !player.hasPermission("LoParkour.gamemode." + mode.getName());
|
||||
|
|
@ -52,15 +56,18 @@ public class SingleMenu extends LPMenu {
|
|||
|
||||
String title = Locales.getString(locale, "play.single.name");
|
||||
|
||||
ScrollableGUI gui = ScrollableGUI.create()
|
||||
.title(ColorUtil.color(title))
|
||||
.rows(3)
|
||||
.scrollUpButton(backItem(), 0)
|
||||
.scrollDownButton(nextItem(), 8);
|
||||
// Calculate pagination
|
||||
int totalPages = (int) Math.ceil((double) items.size() / ITEMS_PER_PAGE);
|
||||
int startIndex = currentPage * ITEMS_PER_PAGE;
|
||||
int endIndex = Math.min(startIndex + ITEMS_PER_PAGE, items.size());
|
||||
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
InventoryGUI gui = baseGui(title, 3);
|
||||
|
||||
// Add items for current page
|
||||
for (int i = startIndex; i < endIndex; i++) {
|
||||
final Mode mode = availableModes.get(i);
|
||||
gui = gui.addItem(items.get(i), e -> {
|
||||
int slot = 10 + (i - startIndex); // Slots 10-16
|
||||
gui = gui.setItem(slot, items.get(i), e -> {
|
||||
// Prevent multiple clicks - check if player is already in parkour
|
||||
if (ParkourUser.getUser(player) != null) {
|
||||
return; // Already in parkour, ignore click
|
||||
|
|
@ -71,6 +78,17 @@ public class SingleMenu extends LPMenu {
|
|||
});
|
||||
}
|
||||
|
||||
// Add navigation buttons
|
||||
if (currentPage > 0) {
|
||||
// Previous page button
|
||||
gui = gui.setItem(0, backItem(), e -> open(player, currentPage - 1));
|
||||
}
|
||||
|
||||
if (currentPage < totalPages - 1) {
|
||||
// Next page button
|
||||
gui = gui.setItem(8, nextItem(), e -> open(player, currentPage + 1));
|
||||
}
|
||||
|
||||
gui.open(player);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,9 +5,8 @@ import dev.loki.loparkour.menu.LPMenu;
|
|||
import dev.loki.loparkour.mode.Modes;
|
||||
import dev.loki.loparkour.player.ParkourUser;
|
||||
import dev.loki.loparkour.session.Session;
|
||||
import dev.loki.loparkour.util.ColorUtil;
|
||||
import dev.loki.loparkour.world.Divider;
|
||||
import dev.lolib.gui.ScrollableGUI;
|
||||
import dev.lolib.gui.InventoryGUI;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
|
@ -19,8 +18,16 @@ import java.util.List;
|
|||
|
||||
public class SpectatorMenu extends LPMenu {
|
||||
|
||||
private static final int ITEMS_PER_PAGE = 7; // Slots 10-16 (middle row)
|
||||
private int currentPage = 0;
|
||||
|
||||
@Override
|
||||
public void open(@NotNull Player player) {
|
||||
open(player, 0);
|
||||
}
|
||||
|
||||
public void open(@NotNull Player player, int page) {
|
||||
this.currentPage = page;
|
||||
String locale = locale(player);
|
||||
ParkourUser user = ParkourUser.getUser(player);
|
||||
String title = Locales.getString(locale, "play.spectator.name");
|
||||
|
|
@ -44,15 +51,29 @@ public class SpectatorMenu extends LPMenu {
|
|||
items.add(skull);
|
||||
}
|
||||
|
||||
ScrollableGUI gui = ScrollableGUI.create()
|
||||
.title(ColorUtil.color(title))
|
||||
.rows(3)
|
||||
.scrollUpButton(backItem(), 0)
|
||||
.scrollDownButton(nextItem(), 8);
|
||||
// Calculate pagination
|
||||
int totalPages = (int) Math.ceil((double) items.size() / ITEMS_PER_PAGE);
|
||||
int startIndex = currentPage * ITEMS_PER_PAGE;
|
||||
int endIndex = Math.min(startIndex + ITEMS_PER_PAGE, items.size());
|
||||
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
InventoryGUI gui = baseGui(title, 3);
|
||||
|
||||
// Add items for current page
|
||||
for (int i = startIndex; i < endIndex; i++) {
|
||||
final Session session = sessions.get(i);
|
||||
gui = gui.addItem(items.get(i), e -> Modes.SPECTATOR.create(player, session));
|
||||
int slot = 10 + (i - startIndex); // Slots 10-16
|
||||
gui = gui.setItem(slot, items.get(i), e -> Modes.SPECTATOR.create(player, session));
|
||||
}
|
||||
|
||||
// Add navigation buttons
|
||||
if (currentPage > 0) {
|
||||
// Previous page button
|
||||
gui = gui.setItem(0, backItem(), e -> open(player, currentPage - 1));
|
||||
}
|
||||
|
||||
if (currentPage < totalPages - 1) {
|
||||
// Next page button
|
||||
gui = gui.setItem(8, nextItem(), e -> open(player, currentPage + 1));
|
||||
}
|
||||
|
||||
gui.open(player);
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ public class LangMenu extends LPMenu {
|
|||
String locale = pp.locale;
|
||||
String title = Locales.getString(locale, "settings.lang.name");
|
||||
|
||||
List<String> langs = new ArrayList<>(Locales.locales.keySet());
|
||||
List<String> langs = new ArrayList<>(Locales.getLocaleKeys());
|
||||
|
||||
InventoryGUI gui = baseGui(title, 3);
|
||||
|
||||
|
|
|
|||
|
|
@ -147,7 +147,6 @@ public class ParkourSettingsMenu extends LPMenu {
|
|||
String locale = pp.locale;
|
||||
String title = Locales.getString(locale, "settings.parkour_settings.styles.name");
|
||||
|
||||
List<Style> styles = new ArrayList<>();
|
||||
InventoryGUI gui = baseGui(title, 3);
|
||||
|
||||
int slot = 10;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue